package main

import (
	"fmt"
	"sync"
)

var (
	wg sync.WaitGroup
)

func printNum() {
	wg.Done()
	for i := 1; i < 5; i++ {
		fmt.Println(i)
	}
}

// 这个协程会出现错误， 如果不进行defer+recover进行拦截会导致主程序异常
func divide(num1 int, num2 int) {
	wg.Done()

	// defer+recover 拦截异常输出
	defer func() {
		err := recover()
		if err != nil {
			fmt.Println("divide error -> ", err)
		}
	}()

	fmt.Println("result:", num1/num2)
}

func main() {
	wg.Add(2)
	go printNum()
	go divide(10, 0)
	wg.Wait()
}
